package com.gitee.feizns.itrip.personal.biz.mapper;

import com.baomidou.mybatisplus.plugins.Page;
import com.gitee.feizns.itrip.personal.biz.entity.ao.ForAcceptGetPersonalOrderList;
import com.gitee.feizns.itrip.personal.biz.entity.vo.ForViewGetPersonalOrderInfo;
import com.gitee.feizns.itrip.personal.biz.entity.vo.ForViewGetPersonalOrderRoomInfo;
import com.gitee.feizns.itrip.personal.biz.entity.vo.ForViewPersonalOrderList;
import com.gitee.feizns.itrip.personal.biz.entity.vo.ForViewQueryOrderById;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @author feizns
 * @since 2019/1/10 0010
 */
public interface BizHotelOrderMapper {

    /**
     * @param orderId
     * 根据订单编号获取订单用户编号
     * @return
     */
    Long getOrderUserId(Long orderId);

    /**
     * 获取个人订单列表
     * @param page
     * @param userId 用户编号
     * @return
     */
    List<ForViewPersonalOrderList> getPersonOrderList(@Param("page") Page<ForViewPersonalOrderList> page,
                                                      @Param("condition") ForAcceptGetPersonalOrderList condition,
                                                      @Param("userId") Long userId);

    /**
     * 根据订单编号获取订单房间信息
     * @param orderId
     * @return
     */
    ForViewGetPersonalOrderRoomInfo getPersonOrderRoomInfo(Long orderId);

    /**
     * 根据订单编号获取订单房间信息
     * @param orderId
     * @return
     */
    ForViewGetPersonalOrderInfo getPersonalOrderInfo(Long orderId);

    /**
     * 查询指定时间内待付款的订单数
     * @param roomId
     * @param startDate
     * @param endDate
     * @return
     */
    Integer queryPendingPaymentWithinTheSpecifiedTime(@Param("roomId") Long roomId,
                                                      @Param("startDate") Date startDate,
                                                      @Param("endDate") Date endDate);

    /**
     * 获取订单信息
     * @param orderId
     * @return
     */
    ForViewQueryOrderById getOrderById(Long orderId);

    /**
     * 将代付款中 超时的订单 设置为指定的状态
     * @param orderStatus 目标状态
     * @param hour 多久过期：(小时)
     * @return
     */
    int flushOrderStatusToCancel(@Param("hour") int hour);

    /**
     * 将修改已付款的账单中，已过期的订单状态为已消费
     * @return
     */
    int flushOrderStatusToConsumer();

}
